// 目的：用 forward_list 存储稀疏图邻接边，适合单向遍历算法（BFS/DFS）。
#include <forward_list>
#include <vector>
#include <iostream>

class Graph {
public:
    explicit Graph(std::size_t n) : adj_(n) {}

    void addEdge(std::size_t from, std::size_t to) {
        adj_[from].push_front(to);
    }

    void dump() const {
        for (std::size_t i = 0; i < adj_.size(); ++i) {
            std::cout << i << ":";
            for (auto to : adj_[i]) {
                std::cout << ' ' << to;
            }
            std::cout << '\n';
        }
    }

private:
    std::vector<std::forward_list<std::size_t>> adj_;
};

int main() {
    Graph g(4);
    g.addEdge(0, 1);
    g.addEdge(0, 2);
    g.addEdge(1, 3);
    g.addEdge(2, 3);
    g.dump();
    return 0;
}